package cn.zyn.oss.service.impl;

import cn.zyn.oss.service.OssService;
import cn.zyn.oss.utils.ConstantPropertiesUtils;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

/**
 * @author ：zyn
 * @date ：Created in 2022/5/25 11:56
 * @description：
 * @modified By：
 * @version: $
 */

@Service
public class OssServiceImpl implements OssService {
    @Override
    public String uploadFileAvatar(MultipartFile file) {
        // 工具类获取值
        String endpoint = ConstantPropertiesUtils.END_POIND;
        String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
        String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            InputStream inputStream = file.getInputStream();

            //获取文件名称
            String fileName = file.getOriginalFilename();

            //1 在文件名称里面添加随机唯一的值
            //UUID生成的值是唯一的  yuyu-4344-gf5f
            //-替换成""
            String uuid = UUID.randomUUID().toString().replaceAll("-","");
            // yuy76t5rew01.jpg
            fileName = uuid+fileName;

            //2 把文件按照日期进行分类
            //获取当前日期
            //   2022/11/12/01.png
            String datePath = new DateTime().toString("yyyy/MM/dd");
            //拼接
            //  2022/11/12/ewtqr313401.jpg
            fileName = datePath+"/"+fileName;

            /*
            调用oss方法实现上传

            第一个参数   Bucket名称
            第二个参数  上传到oss文件路径和文件名称   aa/bb/1.jpg
            第三个参数  上传文件输入流
            */
            ossClient.putObject(bucketName, fileName, inputStream);

            //关闭ossClient
            ossClient.shutdown();


            //获取url地址
            String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
            return url;


        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }

    }
}
